﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <assert.h>

//一：模拟实现strcmp

//1.基础使用
//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[] = "abc";
//	int r = strncmp(arr1, arr2,3);
//	printf("%d\n", r);
//	int r2 = strncmp(arr1, arr2, 4);
//	printf("%d\n", r2);
//
//
//	return 0;
//}
//2.自主实现函数
//int my_strcmp(const char* str1,const char* str2)
//{
// assert(str1&&str2)
//	while (*str1 == *str2)
//	{
//		if (*str1 == '\0')
//			return 0; //***相等的情况
//		str1++;
//		str2++;
//	}
//	if (*str1 > *str2)
//		return 1;
//	if (*str1 < *str2)
//		return -1;
//}
//
//int main()
//{
//	char arr1[] = "abcdef";
//	char arr2[] = "abcdef";
//	int ret = my_strcmp(arr1, arr2);
//	if (ret > 0)
//	{
//		printf("arr1>arr2\n");
//	}
//	else if (ret < 0)
//	{
//		printf("arr1<arr2\n");
//	}
//	else
//		printf("arr1=arr2");
//	return 0;
//}

//二：模拟实现strstr

//基础写法
//int main()
//{
//	char arr1[] = "heheabcdef";
//	char arr2[] = "abc";
//	char* p = strstr(arr1, arr2);  //如果str1指向的字符串中存在str2指向的字符串，那么返回第⼀次出现位置的指针
//	                              //如果str1指向的字符串中不存在str2指向的字符串，那么返回NULL
//		if (*p != NULL)  
//		{
//			printf("找到了，%s\n", p);
//		}
//		else
//		{
//			printf("没找到\n");
//		}
//}
//很重要****
//char* my_strstr(const char* str1, const char* str2)
//{
//	//1.首先进行赋值：
//	assert(str1 && str2);
//	char* p = str1;
//	char* s1 = NULL;
//	char* s2 = NULL;
//	if (*str2 == '\0')
//		return str1;
//	while (*p)
//	{
//		s1 = p;
//		s2 = str2;
//		while (*s1 && *s2 && *s1 == *s2)
//		{
//			s1++;
//			s2++;
//		}
//		if (*s2 == '\0')
//			return p;
//		p++;
//	}
//	return NULL;
//}
//
//int main()
//{
//	char arr1[] = "abbbcdef";
//	char arr2[] = "bbc";
//	char* p = my_strstr(arr1, arr2);
//	if (p != NULL)
//	{
//		printf("找到了，%s\n", p);
//	}
//	else
//	{
//		printf("没找到");
//	}
//	return 0;
//}






//3.1
//int main()
//{
//	char arr1[20] = { 0 };
//	char arr2[] = "abcdefgh";
//	char* r = strncpy(arr1, arr2, 5);
//	printf("%s\n", r);
//	return 0;
//}

//3.2******

//char* my_strncpy(char* dest, char* src, size_t n)
//{
//	while (*dest)
//	{
//		*dest = *src;
//		dest++;
//		src++;
//
//	}
//}
//
//int main()
//{
//	char arr1[20] = { 0 };
//	char arr2[] = "abcdefgh";
//	char* r = my_strncpy(arr1, arr2, 6);
//
//}




//int main()
//{
//	char arr1[20] = "hello ";
//	char arr2[] = "world";
//	char* r = strncat(arr1, arr2, 5);
//	printf("%s\n", arr1);
//	printf("%s\n", r);
//	return 0;
//}










//五：模拟实现memcpy

//int main()
//{
//	int arr1[] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[20] = { 0 };
//	int r = memcpy(arr2, arr1,40);
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr2[i]);
//	}
//	return 0;
//}
 


int main()
{
	char a = -1;
	signed char b = -1;
	unsigned char c = -1;
	printf("%d %d %d", a, b, c);
	return 0;
}